package ar.edu.sovietrussia;

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
 * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
 * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
 * License. You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */

import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
import org.apache.wicket.authroles.authorization.strategies.role.Roles;
import org.apache.wicket.request.Request;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import services.user.PersonService;
import users.Person;

public class MyAuthenticatedWebSession extends AuthenticatedWebSession {
    private static final long serialVersionUID = 1780478754094581697L;

    private ApplicationContext context;

    private PersonService personService;

    private Person model;

    public ApplicationContext getContext() {
        return this.context;
    }

    public void setContext(final ApplicationContext context) {
        this.context = context;
    }

    /**
     * Construct.
     * 
     * @param request
     *            The current request object
     */
    public MyAuthenticatedWebSession(final Request request) {
        super(request);

        this.context = new ClassPathXmlApplicationContext(new String[] { "/META-INF/spring-persistence-context.xml",
                "/META-INF/spring-services-context.xml" });
        this.personService = (PersonService) this.context.getBean("service.person");

    }

    @Override
    public boolean authenticate(final String username, final String password) {
        return this.getPersonService().authenticates(username, password);
    }

    /**
     * @see org.apache.wicket.authentication.AuthenticatedWebSession#getRoles()
     */
    @Override
    public Roles getRoles() {
        Roles roles = new Roles();

        if (this.isSignedIn()) {
            roles.add("ADMIN");
        }

        return roles;
    }

    public void setPersonService(final PersonService personService) {
        this.personService = personService;
    }

    public PersonService getPersonService() {
        return this.personService;
    }

    public Person getModel() {
        return this.model;
    }

    public void setModel(final Person model) {
        this.model = model;
    }

}